package proy4sistdistribuidos.interfaz;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.HashMap;

import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

import proy4sistdistribuidos.modelo.ContenedorImagenTomada;
import proy4sistdistribuidos.modelo.ConvertidorNombresSitio;
import proy4sistdistribuidos.modelo.DatosImagenTomada;
import proy4sistdistribuidos.modelo.ImagenTomada;
import proy4sistdistribuidos.serviciosweb.cliente.localizacion.ClienteSWLocalizacion;

//import proy4sistdistribuidos.interfaz.Proy4SistDistribuidosMovilActivity.BtnOnClickListener;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

public class TomarFotoActivity extends Activity {
	private LinearLayout mContainer;
	private static final int REQUEST_PHOTO = 1;
		
	private String rutaCarpetaFotoTemporal = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
	private String nombreFotoTemporal = "fotoTemp.jpg";
	public static final String direccionIPEquipoEscritorio = "192.168.2.101";
	public static final Integer puertoSocketEquipoEscritorio = 8081;
    
	private HashMap<String, Intent> mPruebas;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tomarfoto);
        
		//super.onCreate(savedInstanceState);
        
        /*mContainer = new LinearLayout(this);
        mContainer.setOrientation(LinearLayout.VERTICAL);
        mContainer.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
        setContentView(mContainer);
        */
 
        
        Intent intent = getIntent();
        Bundle b = intent.getExtras();
        /*
        // Enviar texto (sencillo)
        intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");  
        intent.putExtra(Intent.EXTRA_SUBJECT, "asunto de prueba");
        intent.putExtra(Intent.EXTRA_TEXT, "probando el envio");
        createButton("compartir (selector)", intent.createChooser(intent, "enviar"));
        
        // enviar un mail
        intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");  
        intent.putExtra(Intent.EXTRA_SUBJECT, "asunto de prueba");
        intent.putExtra(Intent.EXTRA_TEXT, "probando el envio");
        intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"sheldon@cooper.com"});
        createButton("Mail To", intent);
        
         */
        // tomar una foto
        
        /*File folder = new File(this.rutaCarpetaFotoTemporal);
        if(!folder.exists()){
        	folder.mkdirs();

        }
        
        File file = new File(this.rutaCarpetaFotoTemporal, this.nombreFotoTemporal);
        
        Uri outputFileUri = Uri.fromFile(file);
        
        intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        createButton("Tomar foto", intent, REQUEST_PHOTO);
        //startActivityForResult(intent, REQUEST_PHOTO);
        */
        // ruta del archivo
        EditText etx1 = (EditText) findViewById(R.id.etx1);
        etx1.setText(b.getString("RutaFoto"));
        
        // ubicacion 
        WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        int ipAddress = wifiInfo.getIpAddress();
        String ip = String.format("%d.%d.%d.%d",
        		(ipAddress & 0xff),
        		(ipAddress >> 8 & 0xff),
        		(ipAddress >> 16 & 0xff),
        		(ipAddress >> 24 & 0xff));

        // invocar el ws
        String resultado = "";
        String resultado2 = "";
        
        try{
        	resultado = ClienteSWLocalizacion.obtenerSolitario().obtenerUbicacionCliente(ip);
        	resultado2 = ConvertidorNombresSitio.obtenerSolitario().obtenerNombreSitio(resultado);
        }catch (Exception e) {
			e.printStackTrace();
		}
        
        EditText etx4 = (EditText) findViewById(R.id.etx4);
        etx4.setText(resultado2);
        
    }
	
	
	public void accionBotonRegresar(View view){
        Intent intent = new Intent();
        setResult(RESULT_OK, intent);
        finish();
	}
	
	public void accionBotonEnviar(View view){
        /*Intent intent = new Intent();
        setResult(RESULT_OK, intent);
        finish();*/
		EditText etx1 = (EditText) findViewById(R.id.etx1);
		EditText etx2 = (EditText) findViewById(R.id.etx2);
		EditText etx3 = (EditText) findViewById(R.id.etx3);
		EditText etx4 = (EditText) findViewById(R.id.etx4);
		
		ContenedorImagenTomada cont = new ContenedorImagenTomada();
		DatosImagenTomada datos = new DatosImagenTomada();
		ImagenTomada imagen = new ImagenTomada();
		
		datos.setNombre(etx2.getText().toString());
		datos.setDescripcion(etx3.getText().toString());
		datos.setUbicacion(etx4.getText().toString());
		datos.setColorPromedio("0");
		datos.setTamanho("0");
		
		
		try{
			File file = new File(etx1.getText().toString());
			FileInputStream fStream = new FileInputStream(file);
			BufferedInputStream buffer = new BufferedInputStream(fStream);
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			
			byte[] buf = new byte[1024];
			int bytesLeidos = buffer.read(buf);
			while(bytesLeidos >= 0){
				out.write(buf);
				bytesLeidos = buffer.read(buf);
			}
			
			byte[] archivoArrBytes = out.toByteArray();
			
			out.close();
			buffer.close();
			fStream.close();
			
			imagen.setDatosImagen(archivoArrBytes);
			imagen.setNombre(etx2.getText().toString());
			
			cont.setDatosImagen(datos);
			cont.setContenidoImagen(imagen);
			
			Serializer serializador = new Persister();
			File f = new File(rutaCarpetaFotoTemporal,"temp.xml");
			serializador.write(cont, f);
			
			//Se abre nuevamente el archivo
			String cadena = "";
			FileReader frXML = new FileReader(f);
			BufferedReader brXML = new BufferedReader(frXML);
			String linea = "";
			while ((linea = brXML.readLine())!=null) {
				cadena += linea;
			}
			brXML.close();
			frXML.close();
			
			
			//Se establece comunicacion con el equipo de escitorio para
			//enviar la foto
			Socket elSockete = new Socket(this.direccionIPEquipoEscritorio, this.puertoSocketEquipoEscritorio);
						
			cadena = cadena.replaceAll("\r\n", "_CHARRO2_");
            cadena = cadena.replaceAll("\n", "_CHARRO_");
            String comando = "EnviarFoto_"+cadena;
            PrintWriter pregunta = new PrintWriter(elSockete.getOutputStream(), true);
            BufferedReader respuesta = new BufferedReader(new InputStreamReader(elSockete.getInputStream()));

            //Se envia el comando al equipo de escritorio
            pregunta.println(comando);

            //Se recibe la respuesta del equipo de escritorio
            String respNodo = respuesta.readLine();
			
            
            if(respNodo!=null && !respNodo.equals("")){
            	//Todo excelente
            	Toast.makeText(view.getContext(),"Foto cargada Exitosamente", 4).show();
            } else {
            	throw new Exception ("Se presentaron errores al enviar el archivo");
            }
			
            
            
			
			
			
		}catch(Exception e){
			e.printStackTrace();
		}
		
		
	}
	
	
	protected void createButton(String label, Intent intent) {
    	createButton(label, intent, null);
    }
    
    protected void createButton(String label, Intent intent, Integer requestCode) {
    	 Button btn = new Button(this);
    	 btn.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    	 btn.setText(label);
    	 btn.setOnClickListener(new BtnOnClickListener(intent, requestCode));
    	 
    	 mContainer.addView(btn); 
    }
    
    class BtnOnClickListener implements OnClickListener  {
    	
    	private Intent mIntent;
		private Integer mRequestCode;

		BtnOnClickListener(Intent intent, Integer requestCode) {
    		mIntent = intent;
    		mRequestCode = requestCode;
    	}
    	
		public void onClick(View v) {
			try {
				if( mRequestCode != null) {
					startActivityForResult(mIntent, mRequestCode);
				} else {
					startActivity(mIntent);
				} 
			} catch(Exception e) {
				Toast.makeText(TomarFotoActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
				e.printStackTrace();
			}
		}
    	
    }
}
